# Quiz

The best way to learn and [to avoid the illusion of competence](https://www.coursera.org/lecture/learning-how-to-learn/illusions-of-competence-BuFzf) **is to test yourself.** This will help you to find **where you need to reinforce your knowledge**.

### Q1: Which of the following tools are specifically designed for video games development?

<Question
	choices={[
		{
			text: "Unity (C#)",
			explain: "",
            correct: true,
		},
		{
			text: "Unreal Engine (C++)",
			explain: "",
            correct: true,
		},
		{
			text: "Godot (GDScript, C++, C#)",
			explain: "",
            correct: true,
		},
		{
			text: "JetBrains' Rider",
			explain: "Although useful for its support of C# for Unity, it's not a video games development IDE",
            correct: false,
		},
		{
			text: "JetBrains' CLion",
			explain: "Although useful for its support of C++ for Unreal Engine, it's not a video games development IDE",
            correct: false,
		},
		{
			text: "Microsoft Visual Studio and Visual Studio Code",
			explain: "Including support for both Unity and Unreal, they are generic IDEs, not video games oriented.",
            correct: false,
		},
	]}
/>

### Q2: What of the following statements are true about Unity ML-Agents?

<Question
	choices={[
		{
			text: "Unity ´Scene´ objects can be used to create learning environments",
			explain: "",
            correct: true,
		},
		{
			text: "Unit ML-Agents allows you to create and train your agents using Reinforcement Learning",
			explain: "",
            correct: true,
		},
        {
			text: "Its `Communicator` component manages the communication between Unity's C# Environments/Agents and a Python back-end",
			explain: "",
            correct: true,
		},
        {
			text: "The training process uses Reinforcement Learning algorithms, implemented in Pytorch",
			explain: "",
            correct: true,
		},
        {
			text: "Unity ML-Agents only support Proximal Policy Optimization (PPO)",
			explain: "No, Unity ML-Agents supports several families of algorithms, including Actor-Critic which is going to be explained in the next section",
            correct: false,
		},
        {
			text: "It includes a Gym Wrapper and a multi-agent version of it called `PettingZoo`",
			explain: "",
            correct: true,
		},
	]}
/>

### Q3: Fill the missing letters

- In Unity ML-Agents, the Policy of an Agent is called a b \_ \_ \_ n
- The component in charge of orchestrating the agents is called the \_ c \_ \_ \_ m \_

<details>
<summary>Solution</summary>
<ul>
	<li>b r a i n</li>
	<li>a c a d e m y</li>
</ul>
</details>

### Q4: Define with your own words what is a `raycast`

<details>
<summary>Solution</summary>
A raycast is (most of the times) a linear projection, as a `laser` which aims to detect collisions through objects.
</details>

### Q5: Which are the differences between capturing the environment using `frames` or `raycasts`?

<Question
	choices={[
    {
      text: "By using `frames`, the environment is defined by each of the pixels of the screen. By using `raycasts`, we only send a sample of those pixels.",
      explain: "`Raycasts` don't have anything to do with pixels. They are linear projections (lasers) that we spawn to look for collisions.",
      correct: false,
    },
    {
      text: "By using `raycasts`, the environment is defined by each of the pixels of the screen. By using `frames`, we spawn a (usually) line to check what objects it collides with",
      explain: "It's the other way around - `frames` collect pixels, `raycasts` check for collisions.",
      correct: false,
    },
    {
      text: "By using `frames`, we collect all the pixels of the screen, which define the environment. By using `raycast`, we don't use pixels, we spawn (normally) lines and check their collisions",
      explain: "",
      correct: true,
    },
	]}
/>


### Q6: Name several environment and agent input variables used to train the agent in the Snowball or Pyramid environments

<details>
<summary>Solution</summary>
- Collisions of the raycasts spawned from the agent detecting blocks, (invisible) walls, stones, our target, switches, etc.
- Traditional inputs describing agent features, as its speed
- Boolean vars, as the switch (on/off) in Pyramids or the `can I shoot?` in the SnowballTarget.
</details>


Congrats on finishing this Quiz 🥳, if you missed some elements, take time to read the chapter again to reinforce (😏) your knowledge.
